/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package servlets;

import AsocUsu.UnidadFamiliar;
import AsocUsu.Usuario;
import baseDatos.ConsultasBD;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import java.io.IOException;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author oracle
 */
public class ListarUsuarios extends HttpServlet {
    private ConsultasBD baseDatos;
    /**
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("application/pdf");

        //Obtenemos el usuario
        String usuario = request.getParameter("usuario");

        //Paso 1: Creamos el documento
        Document documento = new Document(PageSize.A4, 20, 20, 20, 20);
        try{
            //Paso 2: Creamos un Writer que escribe directamente en el documento
            PdfWriter.getInstance(documento, response.getOutputStream());

            //Paso 3: Abrimos el documento
            documento.open();

            PdfPTable tabla = new PdfPTable(3);

            //Preparamos el encabezado
            int anchuraEncabezados [] = {20, 20, 20};
            tabla.setWidths(anchuraEncabezados);
            tabla.setWidthPercentage(100);
            tabla.getDefaultCell().setBorderWidth(2);
            tabla.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);

            tabla.addCell("Nombre");
            tabla.addCell("Apellidos");
            tabla.addCell("Asociación");

            tabla.setHeaderRows(1);
            //Fin del encabezado

            //Restauramos el borde
            tabla.getDefaultCell().setBorderWidth(1);

            baseDatos = new ConsultasBD();
            List<Usuario> listaUsuario = baseDatos.listarUsuarios();
            List<UnidadFamiliar> listaFam;
            SortedSet<UnidadFamiliar> listaFinal = new TreeSet<UnidadFamiliar>();
            String nombreAsoc = "";
            int numFila = 0;

            //Creamos una lista con todos los usuarios
            for (Usuario u : listaUsuario){
                nombreAsoc = baseDatos.consultarAsocCIF(u.asociacion());
                if (usuario.equalsIgnoreCase("admin") || usuario.equalsIgnoreCase(u.asociacion())){
                    System.out.println("Los users:" + u.nombre() + " " + u.apellidos() + " " + u.asociacion());
                    listaFinal.add(new UnidadFamiliar(u.nombre(), u.apellidos(), nombreAsoc, u.dni()));

                    listaFam = baseDatos.listarFamUsuario(u.nExpediente());

                    for (UnidadFamiliar uf : listaFam){
                        System.out.println("Haciendo el recorrido a los familiares");
                        uf.setAsociacion(nombreAsoc);
                        listaFinal.add(uf);
                    }
                }
            }

            for (UnidadFamiliar uf : listaFinal)
                System.out.println("Gente: " + uf.nombre() + " " + uf.apellidos() + " " + uf.asociacion());

            //Ponemos la lista en el documento PDF
            for (UnidadFamiliar uf : listaFinal){
                if (numFila % 2 == 1)
                    tabla.getDefaultCell().setGrayFill(0.9f);
                else
                    tabla.getDefaultCell().setGrayFill(1);
                tabla.addCell(uf.nombre());
                tabla.addCell(uf.apellidos());
                tabla.addCell(uf.asociacion());
                numFila++;
            }

            Paragraph encabezado = new Paragraph("Listado de usuarios ordenados por nombre");
            encabezado.setAlignment(Element.ALIGN_CENTER);
            documento.add(encabezado);
            documento.add(new Paragraph("  "));
            documento.add(tabla);
        } catch (Exception ex){
            System.out.println("Error: ListaUsuarios - " + ex);
        }
        documento.close();
        System.out.println("El documento se cerró.");
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
